
using System;
using System.Text;
using SpotifyGenNHibernate.CEN;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Exceptions;
using SpotifyGenNHibernate.EN.Spotify;

namespace SpotifyGenNHibernate.CAD.Spotify
{
        public partial class ColaReproduccionCAD : BasicCAD, IColaReproduccionCAD
        {
        public ColaReproduccionCAD() : base ()
        {
        }

        public ColaReproduccionCAD(ISession sessionAux) : base (sessionAux)
        {
        }



        public ColaReproduccionEN ReadOIDDefault (int IdCola)
        {
                ColaReproduccionEN colaReproduccionEN = null;

                try
                {
                        SesssionInitializeTransaction ();
                        colaReproduccionEN = (ColaReproduccionEN)session.Load (typeof(ColaReproduccionEN),
                                IdCola

                                );
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in ColaReproduccionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return colaReproduccionEN;
        }


        public int CrearColaReproduccion (ColaReproduccionEN colaReproduccion)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        if (colaReproduccion.Cancion != null) {
                                for (int i = 0; i < colaReproduccion.Cancion.Count; i++)
                                        colaReproduccion.Cancion [i] = (SpotifyGenNHibernate.EN.Spotify.CancionEN)session.Load (typeof(SpotifyGenNHibernate.EN.Spotify.CancionEN), colaReproduccion.Cancion [i].IdCancion);
                        }
                        if (colaReproduccion.Usuario != null) {
                                colaReproduccion.Usuario = (SpotifyGenNHibernate.EN.Spotify.UsuarioEN)session.Load (typeof(SpotifyGenNHibernate.EN.Spotify.UsuarioEN), colaReproduccion.Usuario.Nombre);
                        }

                        session.Save (colaReproduccion);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in ColaReproduccionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return colaReproduccion.IdCola;
        }

        public void BorrarColaReproduccion (int IdCola)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        ColaReproduccionEN colaReproduccionEN = (ColaReproduccionEN)session.Load (typeof(ColaReproduccionEN),
                                IdCola

                                );
                        session.Delete (colaReproduccionEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in ColaReproduccionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }

        public void AñadirCancion (int p_ColaReproduccion_OID, System.Collections.Generic.IList<int> p_cancion_OIDs)
        {
                SpotifyGenNHibernate.EN.Spotify.ColaReproduccionEN colaReproduccionEN = null;
                try
                {
                        SesssionInitializeTransaction ();
                        colaReproduccionEN = (ColaReproduccionEN)session.Load (typeof(ColaReproduccionEN), p_ColaReproduccion_OID);
                        SpotifyGenNHibernate.EN.Spotify.CancionEN cancionEN = null;
                        if (colaReproduccionEN.Cancion == null) {
                                colaReproduccionEN.Cancion = new System.Collections.Generic.List<EN.Spotify.CancionEN>();
                        }

                        foreach (int item in p_cancion_OIDs) {
                                cancionEN = new EN.Spotify.CancionEN ();
                                cancionEN = (EN.Spotify.CancionEN)session.Load (typeof(EN.Spotify.CancionEN), item);
                                colaReproduccionEN.Cancion.Add (cancionEN);
                        }


                        session.Update (colaReproduccionEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in ColaReproduccionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }

        public void BorrarCancion (int p_ColaReproduccion_OID, System.Collections.Generic.IList<int> p_cancion_OIDs)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        SpotifyGenNHibernate.EN.Spotify.ColaReproduccionEN colaReproduccionEN = null;
                        colaReproduccionEN = (ColaReproduccionEN)session.Load (typeof(ColaReproduccionEN), p_ColaReproduccion_OID);

                        EN.Spotify.CancionEN cancionEN = null;
                        if (colaReproduccionEN.Cancion != null) {
                                foreach (int item in p_cancion_OIDs) {
                                        cancionEN = (CancionEN)session.Load (typeof(CancionEN), item);
                                        if (colaReproduccionEN.Cancion.Contains (cancionEN) == true)
                                                colaReproduccionEN.Cancion.Remove (cancionEN);
                                        else
                                                throw new ModelException ("The identifier " + item + " in p_cancion_OIDs you are trying to unrelationer, doesn't exist in ColaReproduccionEN");
                                }
                        }

                        session.Update (colaReproduccionEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in ColaReproduccionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }
        }
}
